home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / rpcsvc / key_prot.x < prev    next >
Text File  |  2006-05-08  |  6KB  |  287 lines

  1. %/*
  2. % * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  3. % * unrestricted use provided that this legend is included on all tape
  4. % * media and as a part of the software program in whole or part.  Users
  5. % * may copy or modify Sun RPC without charge, but are not authorized
  6. % * to license or distribute it to anyone else except as part of a product or
  7. % * program developed by the user.
  8. % *
  9. % * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  10. % * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  11. % * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  12. % *
  13. % * Sun RPC is provided with no support and without any obligation on the
  14. % * part of Sun Microsystems, Inc. to assist in its use, correction,
  15. % * modification or enhancement.
  16. % *
  17. % * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  18. % * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  19. % * OR ANY PART THEREOF.
  20. % *
  21. % * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  22. % * or profits or other special, indirect and consequential damages, even if
  23. % * Sun has been advised of the possibility of such damages.
  24. % *
  25. % * Sun Microsystems, Inc.
  26. % * 2550 Garcia Avenue
  27. % * Mountain View, California  94043
  28. % */
  29. /*
  30.  * Key server protocol definition
  31.  * Copyright (C) 1990, 1991 Sun Microsystems, Inc.
  32.  *
  33.  * The keyserver is a public key storage/encryption/decryption service
  34.  * The encryption method used is based on the Diffie-Hellman exponential
  35.  * key exchange technology.
  36.  *
  37.  * The key server is local to each machine, akin to the portmapper.
  38.  * Under TI-RPC, communication with the keyserver is through the
  39.  * loopback transport.
  40.  *
  41.  * NOTE: This .x file generates the USER level headers for the keyserver.
  42.  * the KERNEL level headers are created by hand as they kernel has special
  43.  * requirements.
  44.  */
  45.  
  46. %#if 0
  47. %#pragma ident    "@(#)key_prot.x    1.7    94/04/29 SMI"
  48. %#endif
  49. %
  50. %/* Copyright (c)  1990, 1991 Sun Microsystems, Inc. */
  51. %
  52. %/* 
  53. % * Compiled from key_prot.x using rpcgen.
  54. % * DO NOT EDIT THIS FILE!
  55. % * This is NOT source code!
  56. % */
  57.  
  58. /*
  59.  * PROOT and MODULUS define the way the Diffie-Hellman key is generated.
  60.  *
  61.  * MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
  62.  * where p is also prime.
  63.  *
  64.  * PROOT satisfies the following two conditions:
  65.  * (1) (PROOT ** 2) % MODULUS != 1
  66.  * (2) (PROOT ** p) % MODULUS != 1
  67.  *
  68.  */
  69.  
  70. const PROOT = 3;
  71. const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
  72.  
  73. const HEXKEYBYTES = 48;        /* HEXKEYBYTES == strlen(HEXMODULUS) */
  74. const KEYSIZE = 192;        /* KEYSIZE == bit length of key */
  75. const KEYBYTES = 24;        /* byte length of key */
  76.  
  77. /*
  78.  * The first 16 hex digits of the encrypted secret key are used as
  79.  * a checksum in the database.
  80.  */
  81. const KEYCHECKSUMSIZE = 16;
  82.  
  83. /*
  84.  * status of operation
  85.  */
  86. enum keystatus {
  87.     KEY_SUCCESS,    /* no problems */
  88.     KEY_NOSECRET,    /* no secret key stored */
  89.     KEY_UNKNOWN,    /* unknown netname */
  90.     KEY_SYSTEMERR     /* system error (out of memory, encryption failure) */
  91. };
  92.  
  93. typedef opaque keybuf[HEXKEYBYTES];    /* store key in hex */
  94.  
  95. typedef string netnamestr<MAXNETNAMELEN>;
  96.  
  97. /*
  98.  * Argument to ENCRYPT or DECRYPT 
  99.  */
  100. struct cryptkeyarg {
  101.     netnamestr remotename;
  102.     des_block deskey;
  103. };
  104.  
  105. /*
  106.  * Argument to ENCRYPT_PK or DECRYPT_PK
  107.  */
  108. struct cryptkeyarg2 {
  109.     netnamestr remotename;
  110.     netobj    remotekey;    /* Contains a length up to 1024 bytes */
  111.     des_block deskey;
  112. };
  113.  
  114.  
  115. /*
  116.  * Result of ENCRYPT, DECRYPT, ENCRYPT_PK, and DECRYPT_PK
  117.  */
  118. union cryptkeyres switch (keystatus status) {
  119. case KEY_SUCCESS:
  120.     des_block deskey;
  121. default:
  122.     void;
  123. };
  124.  
  125. const MAXGIDS  = 16;    /* max number of gids in gid list */
  126.  
  127. /*
  128.  * Unix credential 
  129.  */    
  130. struct unixcred {
  131.     u_int uid;
  132.     u_int gid;
  133.     u_int gids<MAXGIDS>;    
  134. };
  135.  
  136. /*
  137.  * Result returned from GETCRED
  138.  */
  139. union getcredres switch (keystatus status) {
  140. case KEY_SUCCESS:
  141.     unixcred cred;
  142. default:
  143.     void;
  144. };
  145. /*
  146.  * key_netstarg;
  147.  */
  148.  
  149. struct key_netstarg {
  150.     keybuf st_priv_key;
  151.     keybuf st_pub_key;
  152.     netnamestr st_netname;
  153. };
  154.  
  155. union key_netstres switch (keystatus status){
  156. case KEY_SUCCESS:
  157.     key_netstarg knet;
  158. default:
  159.     void;
  160. };    
  161.  
  162. #ifdef RPC_HDR
  163. %
  164. %#ifndef opaque
  165. %#define opaque char
  166. %#endif
  167. %
  168. #endif
  169. program KEY_PROG {
  170.     version KEY_VERS {
  171.  
  172.         /*
  173.          * This is my secret key.
  174.           * Store it for me.
  175.          */
  176.         keystatus 
  177.         KEY_SET(keybuf) = 1;    
  178.     
  179.         /*
  180.          * I want to talk to X.
  181.          * Encrypt a conversation key for me.
  182.           */
  183.         cryptkeyres
  184.         KEY_ENCRYPT(cryptkeyarg) = 2;    
  185.  
  186.         /*
  187.          * X just sent me a message.
  188.          * Decrypt the conversation key for me.
  189.          */
  190.         cryptkeyres
  191.         KEY_DECRYPT(cryptkeyarg) = 3;
  192.  
  193.         /*
  194.          * Generate a secure conversation key for me
  195.          */
  196.         des_block 
  197.         KEY_GEN(void) = 4;
  198.  
  199.         /*
  200.          * Get me the uid, gid and group-access-list associated
  201.          * with this netname (for kernel which cannot use NIS)
  202.          */
  203.         getcredres
  204.         KEY_GETCRED(netnamestr) = 5;
  205.     } = 1;
  206.     version KEY_VERS2 {
  207.  
  208.         /*
  209.          * #######
  210.          * Procedures 1-5 are identical to version 1
  211.          * #######
  212.          */
  213.  
  214.         /*
  215.          * This is my secret key.
  216.           * Store it for me.
  217.          */
  218.         keystatus 
  219.         KEY_SET(keybuf) = 1;    
  220.     
  221.         /*
  222.          * I want to talk to X.
  223.          * Encrypt a conversation key for me.
  224.           */
  225.         cryptkeyres
  226.         KEY_ENCRYPT(cryptkeyarg) = 2;    
  227.  
  228.         /*
  229.          * X just sent me a message.
  230.          * Decrypt the conversation key for me.
  231.          */
  232.         cryptkeyres
  233.         KEY_DECRYPT(cryptkeyarg) = 3;
  234.  
  235.         /*
  236.          * Generate a secure conversation key for me
  237.          */
  238.         des_block 
  239.         KEY_GEN(void) = 4;
  240.  
  241.         /*
  242.          * Get me the uid, gid and group-access-list associated
  243.          * with this netname (for kernel which cannot use NIS)
  244.          */
  245.         getcredres
  246.         KEY_GETCRED(netnamestr) = 5;
  247.         
  248.         /*
  249.          * I want to talk to X. and I know X's public key
  250.          * Encrypt a conversation key for me.
  251.           */
  252.         cryptkeyres
  253.         KEY_ENCRYPT_PK(cryptkeyarg2) = 6;    
  254.  
  255.         /*
  256.          * X just sent me a message. and I know X's public key
  257.          * Decrypt the conversation key for me.
  258.          */
  259.         cryptkeyres
  260.         KEY_DECRYPT_PK(cryptkeyarg2) = 7;
  261.         
  262.         /* 
  263.          * Store my public key, netname and private key. 
  264.          */
  265.         keystatus
  266.         KEY_NET_PUT(key_netstarg) = 8;
  267.         
  268.         /*
  269.          * Retrieve my public key, netname and private key. 
  270.          */
  271.          key_netstres
  272.         KEY_NET_GET(void) = 9;
  273.         
  274.         /*
  275.          * Return me the conversation key that is constructed 
  276.          * from my secret key and this publickey. 
  277.          */
  278.  
  279.         cryptkeyres 
  280.         KEY_GET_CONV(keybuf) = 10; 
  281.  
  282.         
  283.     } = 2;
  284. } = 100029;
  285.  
  286.  
  287.